基礎(chǔ)架構(gòu)即代碼允許開(kāi)發(fā)人員生成他們需要的任何基礎(chǔ)架構(gòu)組件,包括網(wǎng)絡(luò)、負(fù)載平衡器、數(shù)據(jù)庫(kù)、虛擬機(jī)和連接類型。
使用很少或沒(méi)有文檔
在配置文件中定義規(guī)格和參數(shù)。不需要與正在使用的配置不同步的其他文檔。
版本控制所有配置文件
將所有配置文件置于源代碼管理之下。版本控制在管理基礎(chǔ)架構(gòu)時(shí)提供了靈活性和透明度。它還允許您跟蹤、管理和恢復(fù)以前的清單。
不斷測(cè)試配置
在將任何更改推送到生產(chǎn)環(huán)境之前測(cè)試和監(jiān)控環(huán)境。為了節(jié)省時(shí)間,請(qǐng)考慮設(shè)置??在配置代碼被修改時(shí)運(yùn)行的自動(dòng)化測(cè)試。
模塊化
將您的基礎(chǔ)架構(gòu)劃分為多個(gè)組件,然后通過(guò)自動(dòng)化將它們組合起來(lái)。IaC 分段提供了許多優(yōu)點(diǎn)。您可以控制誰(shuí)可以訪問(wèn)您的代碼的某些部分。您還可以限制可以對(duì)清單進(jìn)行的更改的數(shù)量。
基礎(chǔ)設(shè)施即代碼工具
IaC 工具可加速和自動(dòng)化云環(huán)境的配置。大多數(shù)工具還監(jiān)視先前創(chuàng)建的系統(tǒng)并回滾對(duì)代碼的更改。
雖然它們?cè)诠δ芊矫嬗兴煌袃煞N主要類型的基礎(chǔ)設(shè)施即代碼工具:
- 命令式工具
- 聲明性工具
命令式方法工具
具有命令式方法的工具定義了使基礎(chǔ)架構(gòu)能夠達(dá)到所需狀態(tài)的命令。工程師創(chuàng)建腳本,一次一步配置基礎(chǔ)設(shè)施。由用戶決定最佳的部署過(guò)程。
命令式方法也稱為程序方法。
與聲明式方法工具相比,命令式 IaC 需要更多的手動(dòng)工作。需要執(zhí)行更多任務(wù)才能使腳本保持最新。
命令式工具更適合具有腳本背景的系統(tǒng)管理員。
const aws = require("@pulumi/aws");
let size = "t2.micro";
let ami = "ami-0ff8a91507f77f867"
let group = new aws.ec2.SecurityGroup("webserver-secgrp", {
ingress: [
{protocol: "tcp", fromPort: 22, toPort: 22, cidrBlocks: ["0.0.0.0/0"] },
],
});
let server = new aws.ec2.Instance("webserver-www", {
instanceType: size,
securityGroups: [ group.name ],
ami: ami,
});
exports.publicIp = server.publicIp;
exports.publicHostName= server.publicDns;
命令式 IaC 示例(使用 Pulumi)
聲明式方法工具
聲明性方法描述了基礎(chǔ)設(shè)施的期望狀態(tài),而不列出達(dá)到該狀態(tài)的步驟。IaC 工具處理需求,然后自動(dòng)配置必要的軟件。
雖然不需要分步說(shuō)明,但聲明式方法需要熟練的管理員來(lái)設(shè)置和管理環(huán)境。
聲明式工具面向具有強(qiáng)大編程經(jīng)驗(yàn)的用戶。
resource "aws_instance" "myEC2" {
ami = "ami-0ff8a91507f77f867"
instance_type = "t2.micro"
security_groups = ["sg-1234567"]
}
聲明性基礎(chǔ)設(shè)施即代碼示例(使用 Terraform)
流行的 IaC 工具
市場(chǎng)上使用最廣泛的基礎(chǔ)設(shè)施即代碼工具包括:
- Terraform:?這個(gè)開(kāi)源聲明性工具提供了預(yù)先編寫(xiě)的模塊,您可以使用參數(shù)填充這些模塊以構(gòu)建和管理基礎(chǔ)設(shè)施。
- Pulumi:Pulumi?的主要優(yōu)勢(shì)在于用戶可以依靠自己喜歡的語(yǔ)言來(lái)描述所需的基礎(chǔ)設(shè)施。
- Puppet:?使用 Puppet 的基于 Ruby 的 DSL,您可以定義所需的基礎(chǔ)設(shè)施狀態(tài),該工具會(huì)自動(dòng)創(chuàng)建環(huán)境。
- Ansible:??Ansible 使您能夠通過(guò)描述組件和系統(tǒng)如何相互關(guān)聯(lián)來(lái)對(duì)基礎(chǔ)架構(gòu)進(jìn)行建模。
- Chef:??Chef 是市場(chǎng)上最受歡迎的命令式工具。Chef 允許用戶使用其基于 Ruby 的 DSL 制作“食譜”和“食譜”。這些文件指定了實(shí)現(xiàn)所需環(huán)境所需的確切步驟。
- SaltStack:??SaltStack 的不同之處在于配置和配置基礎(chǔ)設(shè)施組件的簡(jiǎn)單性。